package com.example.tests;

import java.io.FileReader;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import com.example.fw.ApplicationManager;
import static com.example.tests.ContactDataGenerator.generateRandomContacts;
import static com.example.tests.GroupDataGenerator.generateRandomGroups;

public class TestBase {
	
	protected static ApplicationManager app; 

	@BeforeTest
	public void setUp() throws Exception {
		  Properties properties = new Properties();
		  String configFile = System.getProperty("configFile","application.properties");
		  properties.load(new FileReader(new File(configFile)));
		  app = new ApplicationManager(properties); 		  
	  }

	@AfterTest
	public void tearDown() throws Exception {
		  app.stop();
	  }	
	

		
	  public static List<Object[]> wrapGroupsForDataProvider(List<GroupData> groups) {
			List<Object[]> list = new ArrayList<Object[]>();
			for(GroupData group : groups)
			{
				list.add(new Object[]{group});
			}	
		return list;
	}
	  
   @DataProvider
   public Iterator<Object[]> randomValidGroupGenerator() {
		return  wrapGroupsForDataProvider(generateRandomGroups(2)).iterator();
		  }
   @DataProvider
   public Iterator<Object[]> randomValidContactGenerator() {
		return  wrapContactsForDataProvider(generateRandomContacts(2)).iterator();
	  }

	public static List<Object[]> wrapContactsForDataProvider(List<ContactData> contacts) {
		List<Object[]> list = new ArrayList<Object[]>();
		for(ContactData contact : contacts)
		{
			list.add(new Object[]{contact});
		}	
		return list;
	}
	
}
